home *** CD-ROM | disk | FTP | other *** search
/ PC World 2007 June / PCWorld_2007-06_cd.bin / v cisle / tclock / tclocklight-040702-3.exe / source / exe / cmdopt.c < prev    next >
C/C++ Source or Header  |  2004-01-10  |  4KB  |  193 lines

  1. /*-------------------------------------------------------------
  2.   cmdopt.c : process command line options
  3.   (C) 1997-2003 Kazuto Sato
  4.   Please read readme.txt about the license.
  5.   
  6.   Written by Kazubon, Nanashi-san
  7. ---------------------------------------------------------------*/
  8.  
  9. #include "tclock.h"
  10.  
  11. /* Globals */
  12. void CheckCommandLine(HWND hwnd, BOOL bPrev);
  13.  
  14. /* Statics */
  15. static void SendStringToClock(HWND hwndClock, const char *value, int type);
  16.  
  17. /*-------------------------------------------
  18.    process command line option
  19. ---------------------------------------------*/
  20. void CheckCommandLine(HWND hwnd, BOOL bPrev)
  21. {
  22.     HWND hwndClock;
  23.     char name[20], value[MAX_PATH];
  24.     BOOL bquot;
  25.     char *p;
  26.     int i;
  27.     
  28.     hwndClock = GetClockWindow();
  29.     
  30.     p = GetCommandLine();
  31.     
  32.     while(*p)
  33.     {
  34.         if(*p == '/')
  35.         {
  36.             p++;
  37.             for(i = 0; *p && *p != ' ' && *p != '\"' && i < 19; i++)
  38.             {
  39.                 name[i] = *p++;
  40.             }
  41.             name[i] = 0;
  42.             while(*p == ' ') p++;
  43.             
  44.             value[0] = 0;
  45.             if(*p && *p != '/')
  46.             {
  47.                 bquot = FALSE;
  48.                 if(*p == '\"') { bquot = TRUE; p++; }
  49.                 for(i = 0; *p && i < MAX_PATH-1; i++)
  50.                 {
  51.                     if(bquot) { if(*p == '\"') break; }
  52.                     else { if(*p == ' ') break; }
  53.                     value[i] = *p++;
  54.                 }
  55.                 value[i] = 0;
  56.                 if(bquot && *p == '\"') p++;
  57.             }
  58.             
  59.             if(strcmp(name, "prop") == 0)
  60.             {
  61.                 ExecFile(hwnd, "tcprop.exe");
  62.             }
  63.             else if(strcmp(name, "exit") == 0)
  64.             {
  65.                 if(bPrev && hwndClock)
  66.                     PostMessage(hwndClock, CLOCKM_EXIT, 0, 0);
  67.             }
  68.             else if(strcmp(name, "blink") == 0)
  69.             {
  70.                 if(bPrev && hwndClock)
  71.                 {
  72.                     PostMessage(hwndClock, CLOCKM_BLINK, 0,
  73.                         atoi(value));
  74.                 }
  75.             }
  76.             else if(strncmp(name, "ustr", 4) == 0)
  77.             {
  78.                 int n = name[4] - '0';
  79.                 
  80.                 if(0 <= n && n <= 9 && bPrev && hwndClock)
  81.                     SendStringToClock(hwndClock, value,
  82.                         COPYDATA_USTR0 + n);
  83.             }
  84.             else if(strcmp(name, "disp1") == 0)
  85.             {
  86.                 if(bPrev && hwndClock)
  87.                     SendStringToClock(hwndClock, value, COPYDATA_DISP1);
  88.             }
  89.             else if(strcmp(name, "disp2") == 0)
  90.             {
  91.                 if(bPrev && hwndClock)
  92.                     SendStringToClock(hwndClock, value, COPYDATA_DISP2);
  93.             }
  94.             else if(strcmp(name, "cat1") == 0)
  95.             {
  96.                 if(bPrev && hwndClock)
  97.                     SendStringToClock(hwndClock, value, COPYDATA_CAT1);
  98.             }
  99.             else if(strcmp(name, "cat2") == 0)
  100.             {
  101.                 if(bPrev && hwndClock)
  102.                     SendStringToClock(hwndClock, value, COPYDATA_CAT2);
  103.             }
  104.             else if(strcmp(name, "sound") == 0)
  105.             {
  106.                 if(bPrev)
  107.                     SendStringToOther(hwnd, NULL, value, COPYDATA_SOUND);
  108.                 else PlayFileCmdLine(hwnd, value);
  109.             }
  110.             else if(strcmp(name, "cmd") == 0)
  111.             {
  112.                 if(bPrev)
  113.                 {
  114.                     int n = atoi(value);
  115.                     if(n >= 100)
  116.                         PostMessage(hwnd, WM_COMMAND, n, 0);
  117.                 }
  118.             }
  119.             else if(strcmp(name, "nowait") == 0)
  120.             {
  121.                 if(!bPrev && GetMyRegLong(NULL, "DelayStart", 0) > 0)
  122.                 {
  123.                     KillTimer(hwnd, IDTIMER_START);
  124.                     SetTimer(hwnd, IDTIMER_START, 100, NULL);
  125.                 }
  126.             }
  127.             else if(strcmp(name, "idle") == 0)
  128.             {
  129.                 if(!bPrev)
  130.                 {
  131.                     HANDLE op = OpenProcess(PROCESS_ALL_ACCESS,
  132.                         TRUE, GetCurrentProcessId());
  133.                     SetPriorityClass(op, IDLE_PRIORITY_CLASS);
  134.                     Sleep(10);
  135.                 }
  136.             }
  137.         }
  138.         else p++;
  139.     }
  140. }
  141.  
  142. /*------------------------------------------------
  143.   wrapper function of SendStringToOtherW
  144. --------------------------------------------------*/
  145. void SendStringToClock(HWND hwndClock, const char *value, int type)
  146. {
  147.     wchar_t wtemp[BUFSIZE_DISP], wvalue[BUFSIZE_DISP], *sp;
  148.     int i;
  149.     
  150.     MultiByteToWideChar(CP_ACP,
  151.         0, value, -1, wtemp, BUFSIZE_DISP-1);
  152.     sp = wtemp;
  153.     for(i = 0; i < BUFSIZE_DISP-1 && *sp; i++)
  154.     {
  155.         // line break
  156.         if(i < BUFSIZE_DISP-2 && *sp == '\\' && *(sp + 1) == 'n')
  157.         {
  158.             wvalue[i++] = 0x0d; wvalue[i] = 0x0a;
  159.             sp += 2;
  160.         }
  161.         // unicode charactor
  162.         else if(*sp == '\\' && *(sp + 1) == 'x')
  163.         {
  164.             wchar_t ch = 0;
  165.             
  166.             sp += 2;
  167.             while(*sp)
  168.             {
  169.                 if('0' <= *sp && *sp <= '9')
  170.                     ch = (wchar_t)(ch * 16 + *sp - '0');
  171.                 else if('A' <= *sp && *sp <= 'F')
  172.                     ch = (wchar_t)(ch * 16 + *sp - 'A' + 10);
  173.                 else if('a' <= *sp && *sp <= 'f')
  174.                     ch = (wchar_t)(ch * 16 + *sp - 'a' + 10);
  175.                 else
  176.                 {
  177.                     if(*sp == ';') sp++;
  178.                     break;
  179.                 }
  180.                 sp++;
  181.             }
  182.             if(ch == 0) ch = ' ';
  183.             wvalue[i] = ch;
  184.         }
  185.         else
  186.             wvalue[i] = *sp++;
  187.     }
  188.     wvalue[i] = 0;
  189.     
  190.     SendStringToOtherW(hwndClock, NULL, wvalue, type);
  191. }
  192.  
  193.